package br.com.canvasForAll.model.entity;

import java.io.Serializable;
import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

@Entity
@Table(name = "POSTIT")
@NamedQueries(value = {
		@NamedQuery(name = "Postit.pesquisa", query = "SELECT p FROM Postit p"),
		@NamedQuery(name = "Postit.duplicata", query = "SELECT COUNT(p) FROM Postit p WHERE lower(p.titulo) = lower(:titulo)")
})
public class Postit implements Serializable {
	
	private static final long serialVersionUID = 7946987523345897051L;

	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	@Column(name = "ID_POSTIT", unique = true, nullable = false)
	private Long id;
	
	@Column(name="TITULO_POSTIT", nullable = true, length = 150)
	private String titulo;
	
	@Column(name="DESCRICAO_POSTIT", columnDefinition = "TEXT")
	private String descricao;
	
	@Temporal(TemporalType.TIMESTAMP)
	@Column(name = "DATA_CRIACAO", nullable = false)
	private Date dataCriacao;
	
	@Temporal(TemporalType.TIMESTAMP)
	@Column(name = "DATA_ULTIMA_ATUALIZACAO", nullable = false)
	private Date dataUltimaAtualizacao;
	
	@Temporal(TemporalType.TIMESTAMP)
	@Column(name = "DATA_ULTIMA_SINCRONIZACAO", nullable = true)
	private Date dataUltimaSincronizacao;
	
	@Temporal(TemporalType.TIMESTAMP)
	@Column(name = "DATA_ULTIMA_NOTIFICACAO", nullable = true)
	private Date dataUltimaNotificacao;
	
	@Column(name = "FLAG_LOCAL_CRIACAO", length = 1, columnDefinition = "CHAR")
	private String localCriacao;
	
	@Column(name = "FLAG_NOTIFICAR", length = 1, columnDefinition = "CHAR")
	private String notificar;
	
	@ManyToOne(fetch = FetchType.EAGER)
	@JoinColumn(name = "ID_QUADRANTE", nullable = false)
	private Quadrante quadrante;
	
	@ManyToOne(fetch = FetchType.EAGER)
	@JoinColumn(name = "ID_COR", nullable = false)
	private Cor cor;

	@ManyToOne(fetch = FetchType.EAGER)
	@JoinColumn(name = "ID_PERFIL", nullable = false)
	private Perfil perfil;
	
	@ManyToOne(fetch = FetchType.EAGER)
	@JoinColumn(name = "ID_CANVAS", nullable = false)
	private Canvas canvas;
	
	public Postit(){
		this.localCriacao = "M";
		this.notificar = "S";
	}
	
	//GETTERS AND SETTERS
	public Long getId() {
		return id;
	}

	public void setId(Long id) {
		this.id = id;
	}

	public String getTitulo() {
		return titulo;
	}

	public void setTitulo(String titulo) {
		this.titulo = titulo;
	}

	public String getDescricao() {
		return descricao;
	}

	public void setDescricao(String descricao) {
		this.descricao = descricao;
	}

	public Quadrante getQuadrante() {
		return quadrante;
	}

	public void setQuadrante(Quadrante quadrante) {
		this.quadrante = quadrante;
	}

	public Cor getCor() {
		return cor;
	}

	public void setCor(Cor cor) {
		this.cor = cor;
	}

	public Canvas getCanvas() {
		return canvas;
	}

	public void setCanvas(Canvas canvas) {
		this.canvas = canvas;
	}

	public Perfil getPerfil() {
		return perfil;
	}

	public void setPerfil(Perfil perfil) {
		this.perfil = perfil;
	}

	public Date getDataCriacao() {
		return dataCriacao;
	}

	public void setDataCriacao(Date dataCriacao) {
		this.dataCriacao = dataCriacao;
	}

	public Date getDataUltimaAtualizacao() {
		return dataUltimaAtualizacao;
	}

	public void setDataUltimaAtualizacao(Date dataUltimaAtualizacao) {
		this.dataUltimaAtualizacao = dataUltimaAtualizacao;
	}

	public Date getDataUltimaSincronizacao() {
		return dataUltimaSincronizacao;
	}

	public void setDataUltimaSincronizacao(Date dataUltimaSincronizacao) {
		this.dataUltimaSincronizacao = dataUltimaSincronizacao;
	}

	public Date getDataUltimaNotificacao() {
		return dataUltimaNotificacao;
	}

	public void setDataUltimaNotificacao(Date dataUltimaNotificacao) {
		this.dataUltimaNotificacao = dataUltimaNotificacao;
	}

	public String getLocalCriacao() {
		return localCriacao;
	}

	public void setLocalCriacao(String localCriacao) {
		this.localCriacao = localCriacao;
	}

	public String getNotificar() {
		return notificar;
	}

	public void setNotificar(String notificar) {
		this.notificar = notificar;
	}

//	public List<Comentario> getComentarios() {
//		return comentarios;
//	}
//
//	public void setComentarios(List<Comentario> comentarios) {
//		this.comentarios = comentarios;
//	}
	
}
